Computing systems commonly use a storage array with a plurality of mass storage devices to store information. The storage array is typically managed by a target controller (or a computing system) that interfaces with a storage server. The storage server receives user input/output (I/O) requests for reading and writing information. The storage server interfaces with the target controller to respond to I/O requests.
Storage space is typically managed as a logical entity, for example as a logical unit number (LUN). Typically, LUNs are presented to a host system by the target controller. The host system then uses the LUNs to read and write information to physical storage devices. Information may be written in blocks that are allocated for the LUNs.
Typically when a LUN is configured, a user specifies the size of the LUN, for example, X Gb. In some instances, the target controller does not reserve X Gb of actual physical storage when the LUN is configured. Instead, the target controller may reserve storage space that is less than X Gb. A block allocation map is used to manage the number of blocks that are actually assigned to the LUN. The target controller adds capacity to the reserved space when it receives an input/output request. This allows the target controller to advertise more storage space than it actually has. This concept is referred to as Thin Provisioning, which means that the actual storage space for a LUN is less than what is advertised.
Information may be migrated from a source LUN to a destination LUN using a migration device/application. Conventional migration techniques are not able to take advantage of thin provisioning because of at least the following reasons: the block level migrating device/application typically is unaware of a block allocation map of thin provisioned LUN. The migrating device/application may also be unaware of a file system or any other application data format. Often the full capacity of the source LUN is not utilized by an application and/or a file system that manages the LUN. However, when the migrating device migrates the source LUN it copies the full capacity of the source LUN to the destination LUN forcing the destination LUN to allocate all the blocks equal to the entire capacity of the source LUN. This results in the migration process overriding the advantages of thin provisioning. It is desirable to use the advantages of thin provisioning for a migration operation and continuous efforts are being made towards that.